// 导入 Pinia 的 defineStore 函数，用于创建状态仓库
import { defineStore } from 'pinia';

/**
 * 创建一个名为 'countdownDay' 的状态仓库
 * 该仓库用于管理倒计时日期的标题和日期信息，并与 localStorage 进行交互
 */
 export const useCountdownDayStore = defineStore('countdownDay', {
  /**
   * 定义状态仓库的初始状态
   * 从 localStorage 中获取保存的倒计时日期标题和日期，如果没有则使用默认值
   */
  state: () => ({
    // 倒计时日期的标题，从 localStorage 中获取，若无则为空
    countdownDayTitle: localStorage.getItem('countdownDayTitle') || '' as string | null,
    // 倒计时日期，从 localStorage 中获取时间戳并转换为 Date 对象，若无则使用当前日期
    countdownDay: localStorage.getItem('countdownDay') ? new Date(Number(localStorage.getItem('countdownDay'))) : new Date() as Date | null,
  }),
  /**
   * 定义状态仓库的操作方法
   * 包含设置、获取和清除倒计时日期的方法
   */
  actions: {
    /**
     * 设置倒计时日期的标题和日期，并将其保存到 localStorage 中
     * @param title - 倒计时日期的标题
     * @param date - 倒计时的日期
     */
    setCountdownDay(title: string, date: Date) {
      this.countdownDayTitle = title;
      this.countdownDay = date;
      localStorage.setItem('countdownDayTitle', title);
      localStorage.setItem('countdownDay', date.getTime().toString());
    },
    /**
     * 获取倒计时日期的标题
     * @returns 倒计时日期的标题，如果没有则返回 null
     */
    getCountdownDayTitle() {
      return this.countdownDayTitle;
    },
    /**
     * 获取倒计时的日期
     * @returns 倒计时的日期，如果没有则返回 null
     */
    getCountdownDay() {
      return this.countdownDay;
    },
    /**
     * 清除倒计时日期的标题和日期，并从 localStorage 中移除相应的数据
     */
    clearCountdownDay() {
      this.countdownDayTitle = null;
      this.countdownDay = null;
      localStorage.removeItem('countdownDayTitle');
      localStorage.removeItem('countdownDay');
    }
  }
});